#pragma once

#include "Display.h"
#include "Display Driver Version.h"
#include "Chip Set Info.h"

namespace StillDesign
{
	namespace NvApi
	{
		ref class PhysicalGpu;
		
		public ref class NvApi
		{
			private:
				ElementCollection<Display^>^ _displays;
				Display^ _defaultDisplay;
				
				List<PhysicalGpu^>^ _gpus;
			
			public:
				NvApi();
				
			private:
				void EnumPhysicalGpus();
				void EnumDisplays();
				
			public:
				DisplayDriverVersion GetDisplayDriverVersion( Display^ display );
				
				ChipSetInfo GetChipSetInfo();
				
				//
				
				property Display^ DefaultDisplay
				{
					Display^ get();
				}
				property ReadOnlyList<Display^>^ Displays
				{
					ReadOnlyList<Display^>^ get();
				}
				property List<PhysicalGpu^>^ Gpus
				{
					List<PhysicalGpu^>^ get();
				}
				
				property int MaximumPhysicalGpus
				{
					int get();
				}
		};
	};
};